using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Xna.Framework;

namespace XnaDevRu.BulletX
{
	/// <summary>
	/// OptimizedBvhNode contains both internal and leaf node information.
	/// It hasn't been optimized yet for storage. Some obvious optimizations are:
	/// Removal of the pointers (can already be done, they are not used for traversal)
	/// and storing aabbmin/max as quantized integers.
	/// 'subpart' doesn't need an integer either. It allows to re-use graphics triangle
	/// meshes stored in a non-uniform way (like batches/subparts of triangle-fans
	/// </summary>
	public class OptimizedBvhNode
	{
		private Vector3 _aabbMin;
		private Vector3 _aabbMax;

		//these 2 pointers are obsolete, the stackless traversal just uses the escape index
		private OptimizedBvhNode _leftChild;
		private OptimizedBvhNode _rightChild;

		private int _escapeIndex;

		//for child nodes
		private int _subPart;
		private int _triangleIndex;

		public Vector3 AabbMin { get { return _aabbMin; } set { _aabbMin = value; } }
		public Vector3 AabbMax { get { return _aabbMax; } set { _aabbMax = value; } }

		public OptimizedBvhNode LeftChild { get { return _leftChild; } set { _leftChild = value; } }
		public OptimizedBvhNode RightChild { get { return _rightChild; } set { _rightChild = value; } }

		public int EscapeIndex { get { return _escapeIndex; } set { _escapeIndex = value; } }

		public int SubPart { get { return _subPart; } set { _subPart = value; } }
		public int TriangleIndex { get { return _triangleIndex; } set { _triangleIndex = value; } }
	}
}
